# config.py
import os

# 项目根目录
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

# 数据路径
DATA_DIR = os.path.join(PROJECT_ROOT, "data")
ANNUAL_REPORTS_DIR = os.path.join(DATA_DIR, "annual_reports")
CSR_REPORTS_DIR = os.path.join(DATA_DIR, "csr_reports")
INITIAL_DICTIONARIES_DIR = os.path.join(DATA_DIR, "dictionaries")
INITIAL_CLIMATE_WORDS_FILE = os.path.join(INITIAL_DICTIONARIES_DIR, "initial_climate_words.txt")
INITIAL_RISK_WORDS_FILE = os.path.join(INITIAL_DICTIONARIES_DIR, "initial_risk_words.txt")
STOPWORDS_DIR = os.path.join(DATA_DIR, "stopwords_dictionaries")
# Checkpoints 路径
CHECKPOINTS_DIR = os.path.join(PROJECT_ROOT, "checkpoints")
BERT_MODEL_DIR = os.path.join(CHECKPOINTS_DIR, "bert-base-chinese")  # bert-base-chinese模型文件存放路径

# 输出路径
OUTPUTS_DIR = os.path.join(PROJECT_ROOT, "outputs")
LOGS_DIR = os.path.join(OUTPUTS_DIR, "logs")

# 确保所有输出和日志目录都存在
os.makedirs(LOGS_DIR, exist_ok=True)
os.makedirs(os.path.join(OUTPUTS_DIR, "step1_keyword_expansion"), exist_ok=True)
os.makedirs(os.path.join(OUTPUTS_DIR, "step2_sentence_extraction"), exist_ok=True)
os.makedirs(os.path.join(OUTPUTS_DIR, "step3_api_labeling"), exist_ok=True)
os.makedirs(os.path.join(OUTPUTS_DIR, "step4_classifier_training"), exist_ok=True)

# Step 1 输出路径
EXPANDED_CLIMATE_DICT_FILE = os.path.join(OUTPUTS_DIR, "step1_keyword_expansion", "气候.txt")
EXPANDED_RISK_DICT_FILE = os.path.join(OUTPUTS_DIR, "step1_keyword_expansion", "风险.txt")
SENTENCE_JSON_DIR = os.path.join(OUTPUTS_DIR, "step1_keyword_expansion", "sentences")

# Step 2 输出路径
CANDIDATE_SENTENCES_FILE = os.path.join(OUTPUTS_DIR, "step2_sentence_extraction", "candidate_sentences.json")

# Step 3 输出路径
LABELED_SENTENCES_API_FILE = os.path.join(OUTPUTS_DIR, "step3_api_labeling", "labeled_sentences_api.json")

# Step 4 输出路径
CLASSIFIER_MODEL_PATH = os.path.join(OUTPUTS_DIR, "step4_classifier_training", "climate_risk_classifier_model.pth")
CLASSIFICATION_REPORT_PATH = os.path.join(OUTPUTS_DIR, "step4_classifier_training", "classification_report.txt")

# API Keys (请替换成你的真实API Key)
# 请注意：不要将真实的API Key直接硬编码到代码中，尤其是在版本控制系统中。
# 更好的做法是使用环境变量或专门的配置文件（不在版本控制中）。
# 这里为了演示方便，暂时写成占位符。
DEEPSEEK_API_KEY = "sk-71ac97439148431186e2adaedc842aa6"  # 请替换

# 模型相关配置
BERT_MODEL_NAME = "bert-base-chinese"  # 与 checkpoints 文件夹中的模型对应

# 其他配置
DEFAULT_LOG_LEVEL = "INFO"
# 文本预处理相关
MIN_SENTENCE_LENGTH = 8  # 预处理后，句子最短长度，过滤掉过短的句子

# 关键词扩展相关
SIMILARITY_THRESHOLD = 0.8  # BERT计算词语相似度的阈值
TOP_N_SIMILAR_WORDS = 10  # 每个种子词扩展出的相似词数量上限

# 分类器训练相关
TRAIN_TEST_SPLIT_RATIO = 0.2
BATCH_SIZE = 16  # 根据你的3090显存调整，可以尝试8, 16, 32
LEARNING_RATE = 2e-5
EPOCHS = 3  # 训练轮数，可以根据效果调整

# CPU核心数 (用于多进程处理，例如文件读取)
# 0 表示让库自动决定，通常是全部可用核心
# 你有64核CPU，可以设置为一个较大的值，但要注意不是所有任务都能完美并行
CPU_CORES = 0  # os.cpu_count()

